<?php
/**
 * フォーム定義抽象クラス
 * 
 * @author tanaka
 * @package Form
 * @subpackage Abstract
 */
abstract class Form_Abstract
{
	/**
	 * パラメータ
	 * 
	 * @var Container_Abstract|array
	 */
	protected $_params = array();
	
	/**
	 * 検証メッセージ
	 * 
	 * @var array
	 */
	protected $_messages = array();
	
	/**
	 * 検証結果
	 * @var bool
	 */
	protected $_result = null;
	
	/**
	 * コンストラクタ
	 * 
	 * @param Container_Abstract|array $params パラメータ
	 * @return
	 */
	public function __construct($params)
	{
		$this->_params = $params;
	}
	
	/**
	 * 検証メッセージを返します。
	 * 
	 * @return array
	 */
	public function getMessages()
	{
		if(is_null($this->_result)){
			$this->isValid();
		}
		
		return $this->_messages;
	}
	
	/**
	 * 検証結果を返します。
	 * 
	 * @return bool
	 */
	abstract public function isValid();
	
	/**
	 * バリデーション用のパラメータを取得
	 * 
	 * @return array
	 */
	public function getParams()
	{
		$params = $this->_params;
		if($params instanceof Container_Abstract){
			$params = $params->toArray();
		}
		
		return $params;
	}
}